IP Header ######### .. figure:: https://img.zhaoweiguo.com/knowledge/images/protocols/ip1.png :width: 70% .. figure:: https://img.zhaoweiguo.com/knowledge/images/protocols/ip2.png :width: 70% .. note:: 由于TCP/IP首部中所有的二进制整数在网络中传输时都使用大端字节序(big endian),因此它又称作网络字节序。 字段详解 ======== 1. 版本号-4:: IP 协议版本号,目前使用的是版本 4 2. 首部长度(IHL)-4:: IP 头部的长度:指的是首部占 32 bit字的数目 由于它是一个 4比特字段,因此最大值是15 也就是说最大IP 首部长度是15*32bit=60字节 普通IP数据报(没有任何选择项)字段的值是 5 3. 服务类型(ToS)-8:: 表示包传输优先级。 最初的协议对这个参数的规定很模糊,最近 DiffServ 规格重新定义了这个字段的用法 包括: 3 bit的优先权子字段(现在已被忽略) 4 bit的TOS子字段 1 bit未用位但必须置0 4. 总长度-16:: 表示 IP 消息的总长度 5. ID 号-16:: 用于识别包的编号,一般为包的序列号。 如果一个包被 IP 分片,则所有分片都拥有相同的 ID 6. 标志(Flag)-3:: 该字段有 3 个比特,其中 2 个比特有效,分别代表是否允许分片,以及当前包是否为分片包 7. 分片偏移量-13:: 表示当前包的内容为整个 IP 消息的第几个字节开始的内容 8. 生存时间(TTL)-8:: 表示包的生存时间 这是为了避免网络出现回环时一个包永远在网络中打转。 每经过一个路由器,这个值就会减 1,减到 0 时这个包就会被丢弃 这个字段规定该数据包在穿过多少个路由之后才会被抛弃 某个ip数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃 这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了 根据系统的不同,这个数字也不一样,一般是32或者是64 Tracerouter这个工具就是用这个原理工作的,tranceroute的-m选项要求最大值是255 9. 协议号-8:: 协议号表示协议的类型(以下均为十六进制) ICMP: 01 IGMP: 02 TCP: 06 UDP: 11 10. 头部校验和-16:: 用于检查错误,现在已不使用 11. 发送方 IP 地址-32:: 网络包发送方的 IP 地址 12. 接收方 IP 地址-32:: 网络包接收方的 IP 地址 13. 可选字段-可变长度:: 除了上面的头部字段之外,还可以添加可选字段 用于记录其他控制信息,但可选字段很少使用